'use strict'

const { users, questionnaire, personalDetails } = require('../models');
const auth = require('../utils/auth');

//首页
var fn_index = async (ctx, next) => {        //异步函数中间件
    ctx.render('index.html');
};

//登录判断
var fn_login = async (ctx, next) => {        //异步函数中间件
    var username = ctx.request.body.name_username.trim() || '';
    var password = ctx.request.body.name_pwd.trim() || '';

    var res = '';
    // 记住密码的测试（未完成）
    // var rememberme = ctx.request.body.rememberMe || '';
    // console.log(rememberme);

    console.log(`用户名：${username}     密码：${password}`);

    // 向数据库查询users表中的所有数据
    var results = await users.findOne({     // 我们使用await因为findAll()返回了一个promise
        where: {   // 给查询语句个where条件
            userName: username,        // userName字段等于用户输入的username
            password: password         // password字段等于用户输入的password
        }
    });
    // console.log(results);       // 输出一个数组[model]为从数据库中查询出符合条件的数据

    var resultsJson = JSON.parse(JSON.stringify(results));  // 用JSON.stringify将查询出来的 results 数据转化为一个对象
    // console.log(resultsJson);
    // console.log(resultsJson.jurisdiction);

    if (resultsJson !== null) {        // 密码正确
        if (resultsJson.state === '1') {
            // 账号状态正常
            // console.log(resultsJson.jurisdiction);
            if (resultsJson.jurisdiction === '1') {
                // 普通用户登录成功
                // 密码正确以后给session赋值        可以在网页按f12后的cookie中查看
                ctx.session.userId = results.id;
                ctx.session.userName = results.userName;
                ctx.response.redirect('/home');
                res = { code: 200 };   // 状态为200，正常
            } else if (resultsJson.jurisdiction === '2') {
                // 管理员登录成功
                // 密码正确以后给session赋值        可以在网页按f12后的cookie中查看
                ctx.session.userId = results.id;
                ctx.session.userName = results.userName;
                ctx.response.redirect('/admin');
                res = { code: 200 };   // 状态为200，正常
            } else {
                //用户错误
                ctx.response.redirect('/loginError');
            }
        } else if (resultsJson.state === '2') {
            //该账号已经冻结
            ctx.response.redirect('/loginError');
        }


    } else {           // 密码错误
        ctx.response.redirect('/loginError');
        res = { code: 1000 };   // 状态为1000，登录错误
    }
};

// 密码正确 登录成功
var fn_login_ok = async (ctx, next) => {
    var username = ctx.session.userName;
    var userId = ctx.session.userId;
    //趁现在，将用户Id存入用户信息表

    // 查看是否已经有该用户信息表
    var userMessage = await personalDetails.findOne({
        where: {
            userId: userId
        }
    });
    // console.log(userMessage);
    if (userMessage === null) {
        // 将用户名信息存入个人信息表
        await personalDetails.create({
            userId: userId,
            sex: "未知",
            interest: "暂无",
            individualResume: "暂无",
            phoneNumber: "暂无",
        });
    }

    // 将数据库里所有的调查问卷名与调查问卷id循环打印到home.html页面
    // 用户表的所有数据
    var userAll = JSON.parse(JSON.stringify(await users.findAll()));
    // console.log(userAll);

    // 查询问卷调查表里的所有数据
    var questionnairesAll = JSON.parse(JSON.stringify(await questionnaire.findAll({
        order: [
            ['id', 'desc']
        ],
        where:{
            state:1
        }
    })));
    // console.log(questionnairesAll);

    questionnairesAll.forEach((qos => {
        var publishUserName = userAll.filter(row => {
            return qos.publishUserId === row.id;
        })[0];
        // console.log(publishUserName);

        qos.publishUserName = publishUserName === undefined ? '匿名' : publishUserName.userName;
        // console.log(qos.publishUserName);
    }))

    var obj = {
        username,
        questionnairesAll,
    }

    ctx.render('Home.html', obj)
}


// 密码错误报错
var fn_login_error = async (ctx, next) => {        // 异步函数中间件
    // 渲染错误页面
    ctx.render('Error.html', {
        // 网页头像
        icon: "/statics/img/loginError.png",
        // 网页插图
        inbetweening: "/statics/img/loginErrorPicture.png",
        // 网页标题
        title: "登录失败",
        // 错误内容
        errorContent: "抱歉，您的账号或密码验证失败",
        // 按钮一路径
        router1: '/',
        // 按钮一文本
        button1: "重新登陆",
        // 按钮二路径
        router2: '/register',
        // 按钮二文本
        button2: "注册"
    });

}

// 注销判断
var logout_fn = async (ctx, next) => {
    ctx.session = null;
    ctx.body = { code: 200, msg: '注销成功' };
}


// 修改密码
var fn_updatePwd = async (ctx, next) => {
    var username = ctx.session.userName;

    var obj = {
        username
    }
    ctx.render('updatePwd.html', obj)
};

// 修改密码表单判断
var fn_updatepwdJudge = async (ctx, next) => {
    var userId = ctx.session.userId;
    // 旧密码
    var password = ctx.request.body.name_passwordBox.trim();
    // 新密码
    var newpassword = ctx.request.body.name_newPasswordBox.trim();
    var againNewPassword = ctx.request.body.name_againNewPasswordBox.trim();

    var userUpdatePwd = JSON.parse(JSON.stringify(await users.findOne({
        where: {
            id: userId
        }
    })));
    // console.log(userUpdatePwd);
    if (password === userUpdatePwd.password) {
        // 旧密码正确
        //更新密码
        await users.update({
            password: newpassword
        }, {
            where: {
                id: userId
            }
        });


        // 使用模板而已，不要在意名字
        //修改密码成功
        var obj = {
            // 网页头像
            icon: "/statics/img/QSOkicon.png",
            // 网页插图
            inbetweening: "/statics/img/修改密码.png",
            // 网页标题
            title: "修改密码成功",
            // 错误内容
            OkContent: "修改密码成功，我们会安全保管此账号密码！",
            // 按钮一路径
            router1: '/home',
            // 按钮一文本
            button1: "返回主页面",
            // 按钮二路径
            router2: '/home/personalDetails',
            // 按钮二文本
            button2: "前去修改个人信息"
        }
        ctx.render('QSOk.html', obj)
    } else {
        // 旧密码错误
        // 使用模板而已，不要在意名字
        //修改密码失败
        var obj = {
            // 网页头像
            icon: "/statics/img/QSOkicon.png",
            // 网页插图
            inbetweening: "/statics/img/修改密码.png",
            // 网页标题
            title: "修改密码失败",
            // 错误内容
            OkContent: "不好意思，您的旧密码不正确，请选择：",
            // 按钮一路径
            router1: '/home/updatePwd',
            // 按钮一文本
            button1: "重新尝试",
            // 按钮二路径
            router2: '/home',
            // 按钮二文本
            button2: "返回主页面"
        }
        ctx.render('QSOk.html', obj)
    }

};



module.exports = {      //暴露对象，键为路径，值为一个数组（请求类型，文件中异步函数）
    '/': ['get', auth, fn_index],    // auth可以作为一个条件
    '/home': ['get', auth, fn_login_ok],    // auth可以作为一个条件
    '/loginDone': ['post', fn_login],
    '/logout': ['post', auth, logout_fn],
    '/loginError': ['get', fn_login_error],
    //修改密码路由
    '/home/updatePwd': ['get', fn_updatePwd],
    //修改密码判断路由
    '/home/updatepwdJudge': ['post', fn_updatepwdJudge],
}